/*
* 非空类型断言使用的是!，表示可以确定某个标识符是有值的，跳过TS在编译阶段对它的检测
* 语法：person.children!.name = "马云"
* */

// 定义一个接口
interface interfacePerson {
    name: string,
    age: number,
    children?: {
        name: string,
    }
}

const person: interfacePerson = {
    name: "陶品奇",
    age: 22
}
// 访问属性的情况：可选链 ?.
console.log(person.children?.name)

// 属性赋值的情况：
// 解决方案一：类型缩小
if (person.children) {
    person.children.name = "马云"
}

// 解决方案二：非空类型断言(危险！！！只有确保children一定有值的时候才能使用)
person.children!.name = "马云"
console.log(person)